草庐IT

TypeScript 运算符

全部标签

c++ - 如果类具有引用数据成员,为什么编译器不合成默认赋值运算符

在C++中,如果类具有引用数据成员,则默认赋值运算符不会由编译器合成。为什么? 最佳答案 InC++,ifaclasshasareferencedatamemberthedefaultassignmentoperatorisnotsynthesizedbycompiler.Why?复制分配应该做什么定义在:C++03标准12.8/13:Eachsubobjectisassignedinthemannerappropriatetoitstype:ifthesubobjectisofclasstype,thecopyassignment

定义构造函数中的定位器或在Typescript中的外部定义定位器的缺点?

我要从Java进行量突(TypeScript)测试自动化。正如我看到打字稿世界中的许多人喜欢定义构造函数中的定位器,例如:exportdefaultclassSignInPageextendsBasePage{privatereadonly_usernameInputLocator:By;privatereadonly_passwordInputLocator:By;constructor(){super();this._usernameInputLocator=by.name('username');this._passwordInputLocator=by.name('password')

C++强制运算符==从接口(interface)抽象类重载

在C++上使用接口(interface)(抽象类)我需要强制任何类而不是继承接口(interface)来实现运算符==。考虑这种情况:classIBase{virtualvoidsomeFunc()const=0;}classCInheritClass:publicIBase{virtualvoidsomeFunc()const;virtualbooloperator==(constCInheritClass&obj)const;}voidmain(){CInheritClassinstance;}类CInheritClass必须实现someFunc因为它继承了Ibase,实现了vir

c++ - 测试是否存在左移运算符

我正在尝试找到一个工作类型特征来检测给定类型是否具有std::ostream的左移运算符重载(例如,可与std::cout或boost::lexical_cast互操作)。我在boost::has_left_shift上取得了成功除了类型是POD或std::string的STL容器的情况类型。我怀疑这与STL类型或operatorstd::ostream的有效左移运算符一般识别类型的正确方法是什么??如果那不可行,是否有单独的方法来检测POD或std::string类型的STL容器上左移运算符的过载?下面的代码显示了我目前正在使用的内容,并演示了如何boost::has_left_sh

c++ - 没有 return 语句的重载赋值运算符

为什么允许赋值运算符返回void?为什么赋值链在这种情况下有效?看看代码,就会很清楚我在说什么。代码:structFoo{std::stringstr;Foo(conststd::string&_str):str(_str){}Foo&operator=(constFoo&_foo){str=_foo.str;//return*this;/*NORETURN!*/}};intmain(){Foof1("1");Foof2("2");Foof3("3");f1=f2=f3=Foo("4");std::cout问题:为什么这是合法的?(为什么要编译)为什么有效?我在很多地方读到“赋值运算符

c++ - C++ 中的空传播运算符

有没有人在C++中实现了空传播运算符,类似于函数式语言中使用的运算符?我正在考虑一些巧妙的模板解决方案,可能类似于运算符->的传播行为。假设我们有一个来自图形的对象链,例如foo->bar->baz(抱歉,得墨忒耳法则)。假设其中任何一个都可以为空,并且应该在取消引用之前进行测试。然后代码突然变得复杂多了:if(!foo)returnnullptr;if(!foo->bar)returnnullptr;returnfoo->bar->baz;我想用像这样的某种紧凑语法“排除”空值检查:foo?->bar?->baz//imaginarynull-propagationsyntax当然,

c# - 比较运算符性能 <= 对 !=

让我们从声明代码可读性胜过微优化开始,我们宁愿将其留给编译器。这只是一个奇怪的案例,其中的细节似乎与一般建议相比很有趣因此搞乱了质数生成器函数,并提出了一个奇怪的行为,其中人们建议最有效的“!=”实际上是最不有效的,而“C#privatestaticvoidMain(string[]args){longtotalTicks=0;for(inti=0;i输出:在C++中类似(在不同的机器上)include#includeintmain(){for(size_ti(0);i输出:循环运行的次数相同。是否有任何优化?这不适用于!=还是一些奇怪的CPU行为? 最佳答

c++ - 旧版本的 C++ 在评估 `int` 语句中的条件时是否使用了类的 `if()` 运算符?

现代版本的C++在评估if()语句中的条件时尝试使用类的bool运算符。其他转换运算符,例如int在不存在bool运算符时使用。如下所示。#includeusingnamespacestd;classTwoInts{public:inta,b;operatorbool(){cout运行这段代码不会产生任何意外:TwoIntstoboolSixIntstoint查看一些旧的C++代码,似乎有一个更改需要验证。旧版本的C++在评估if()语句中的条件时是否使用了类的int运算符?什么版本(如果有)做过某事?那么建议的输出应该是TwoIntstointSixIntstoint关于问题原因的一

c++ - 无法理解逗号运算符的工作原理

在下面的程序中,我重载了commaoperator。但是,为什么commaoperator没有考虑到firstelement/object。classPoint{intx,y;public:Point(){}Point(intpx,intpy){x=px;y=py;}voidshow(){cout我也试图理解,运算符,但找不到解决方案。ob1=(ob1,ob2+ob2,ob3);//Whycontrolisnotreachingcommaoperatorforob1?ob1=(ob3,ob2+ob2,ob1);//Whycontrolisnotreachingcommaoperator

c++ - 数组错误指针的增量运算符?

我正在尝试一些非常简单的事情,本来应该很简单,但不知何故它让我很困惑......我试图理解++在被视为指针时对数组的影响以及在被视为数组时对指针的影响。所以,intmain(){inta[4]={1,4,7,9};*a=3;*(a+1)=4;*++a=4;//compilererror}1:所以在*(a+1)=4我们设置a[1]=4;//快乐的但是当*++a=4;时,我希望指针a递增1,因为++先于*然后*开始,我们使它等于4。但是这段代码只是行不通...这是为什么?另一个问题:intmain(){int*p=(int*)malloc(8);*p=5;printf("%d",p[0])